package Main;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import BusinessObjects.Activity;
import BusinessObjects.Avis;
import BusinessObjects.User;
import Parsers.ActivityParser;
import Parsers.AvisParser;
import Parsers.UserParser;
public class MainProgram {
public static final String inputFolder = "InputDataFolder";
public static final String userOperations = "userOperations.xml";
public static final String activitiesOperations = "activitiesOperations.xml";
public static final String avisOperations = "avisOperations.xml";
public static final String outputFolder = "SaveDataFolder";
public static final String database = "database.xml";
public static final String viewFolder = "view";
public static final String activiteXSLT = "page-activite.xsl";
public static final String userXSLT = "page-utilisateur.xsl";
private Collection<User> usersToCreate;
private Collection<Activity> activitiesToCreate;
private Collection<Avis> avisToCreate;
private Collection<String> usersToDelete;
private Collection<String> activitiesToDelete;
private Collection<String> avisToDelete;
public static void main(String[] args) {
MainProgram main = new MainProgram();
main.loadFromOperationsFiles();
main.saveToDatabaseFile();
main.parseWithXSLT();
}
//Charge les données depuis les fichiers XML avec SAX
public void loadFromOperationsFiles() {
SAXParserFactory factory = SAXParserFactory.newInstance();
// Utilisation des namespace
factory.setNamespaceAware(true);
// TODO Validation des fichiers à partir des dtd
try {
SAXParser parser = factory.newSAXParser();
// Récupération des nouveaux utilisateur sous forme d'objet
File fileUserOperations = new File(inputFolder + "/"
+ userOperations);
UserParser SAXParser = new UserParser(this);
parser.parse(fileUserOperations, SAXParser);
// Récupération des nouvelles activités sous forme d'objet
File fileActivitiesOperations = new File(inputFolder + "/"
+ activitiesOperations);
ActivityParser activityParser = new ActivityParser(this);
parser.parse(fileActivitiesOperations, activityParser);
// Récupération des nouveaux avis sous forme d'objet
File fileAvisOperations = new File(inputFolder + "/"
+ avisOperations);
AvisParser avisParser = new AvisParser(this);
parser.parse(fileAvisOperations, avisParser);
for (User user : this.getUsersToCreate()) {
System.out.println(user);
}
for (Activity activity : this.getActivitiesToCreate()) {
System.out.println(activity);
}
for (Avis avis : this.getAvisToCreate()) {
System.out.println(avis);
}
System.out.println("User à supprimer : "
+ this.getUsersToDelete().size()
+ ", activités à supprimer : "
+ this.getActivitiesToDelete().size()
+ ", Avis à supprimer : " + this.getAvisToDelete().size());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//Enregistre les données chargés dans le fichier database avec DOM
public void saveToDatabaseFile() {
// On ajoute les nouveaux utilisateurs au document "database"
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
try {
File file = new File(outputFolder + "/" + database);
DocumentBuilder db = dbf.newDocumentBuilder();
Document d = db.parse(file);
Element documentElement = d.getDocumentElement();
int compteur;
int iteratorCompteur;
// On crée les nouveaux utilisateurs, avis et activités
Element listeUsers = (Element) documentElement
.getElementsByTagName("database:listeUsers").item(0);
compteur = Integer.parseInt(listeUsers.getAttribute("cptUsers"));
iteratorCompteur = 0;
for (User user : this.getUsersToCreate()) {
iteratorCompteur++;
Element newUser = user.transformToElement(d, compteur
+ iteratorCompteur);
listeUsers.appendChild(newUser);
}
listeUsers.setAttribute("cptUsers", (compteur + iteratorCompteur)
+ "");
Element listeActivites = (Element) documentElement
.getElementsByTagName("database:listeActivites").item(0);
compteur = Integer.parseInt(listeActivites
.getAttribute("cptActivites"));
iteratorCompteur = 0;
for (Activity activity : this.getActivitiesToCreate()) {
iteratorCompteur++;
Element newActivity = activity.transformToElement(d, compteur
+ iteratorCompteur);
listeActivites.appendChild(newActivity);
}
listeActivites.setAttribute("cptActivites",
(compteur + iteratorCompteur) + "");
Element listeAvis = (Element) documentElement.getElementsByTagName(
"database:listeAvis").item(0);
compteur = Integer.parseInt(listeAvis.getAttribute("cptAvis"));
iteratorCompteur = 0;
for (Avis avis : this.getAvisToCreate()) {
iteratorCompteur++;
Element newAvis = avis.transfortToElement(d, compteur
+ iteratorCompteur);
listeAvis.appendChild(newAvis);
}
listeAvis.setAttribute("cptAvis", (compteur + iteratorCompteur)
+ "");
// On enlève les éléments à supprimer
for (int i = 0; i < listeUsers.getChildNodes().getLength(); i++) {
Node n = listeUsers.getChildNodes().item(i);
if (!n.getNodeName().equals("#text")) {
Element currentElement = (Element) n;
String ID = currentElement.getAttribute("utilisateurID");
if (this.usersToDelete.contains(ID)) {
System.out.println("User supprimé n°" + ID);
listeUsers.removeChild(currentElement);
}
}
}
for (int i = 0; i < listeActivites.getChildNodes().getLength(); i++) {
Node n = listeActivites.getChildNodes().item(i);
if (!n.getNodeName().equals("#text")) {
Element currentElement = (Element) n;
String ID = currentElement.getAttribute("ActiviteID");
if (this.activitiesToDelete.contains(ID)) {
System.out.println("Activité supprimé n°" + ID);
listeActivites.removeChild(currentElement);
}
}
}
for (int i = 0; i < listeAvis.getChildNodes().getLength(); i++) {
Node n = listeAvis.getChildNodes().item(i);
if (!n.getNodeName().equals("#text")) {
Element currentElement = (Element) n;
String ID = currentElement.getAttribute("AvisID");
if (this.avisToDelete.contains(ID)) {
System.out.println("Avis supprimé n°" + ID);
listeAvis.removeChild(currentElement);
}
}
}
// On enregistre le nouveau document
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(new DOMSource(d), new StreamResult(file));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
//Crée les pages web avec les différents fichiers XSLT
public void parseWithXSLT(){
TransformerFactory fabriqueT = TransformerFactory.newInstance();
try {
StreamSource XMLSource = new StreamSource(outputFolder+"/"+database);
StreamResult resultActivite = new StreamResult(new File(viewFolder+"/"+"activites.html"));
StreamResult resultUser = new StreamResult(new File(viewFolder+"/"+"users.html"));
Transformer transformerActivite = fabriqueT.newTransformer(new StreamSource(viewFolder+"/"+activiteXSLT));
Transformer transformerUser = fabriqueT.newTransformer(new StreamSource(viewFolder+"/"+userXSLT));
transformerActivite.transform(XMLSource, resultActivite);
transformerUser.transform(XMLSource, resultUser);
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
public Collection<User> getUsersToCreate() {
return usersToCreate;
}
public void setUsersToCreate(Collection<User> usersToCreate) {
this.usersToCreate = usersToCreate;
}
public Collection<Activity> getActivitiesToCreate() {
return activitiesToCreate;
}
public void setActivitiesToCreate(Collection<Activity> activitiesToCreate) {
this.activitiesToCreate = activitiesToCreate;
}
public Collection<String> getUsersToDelete() {
return usersToDelete;
}
public void setUsersToDelete(Collection<String> usersToDelete) {
this.usersToDelete = usersToDelete;
}
public Collection<String> getActivitiesToDelete() {
return activitiesToDelete;
}
public void setActivitiesToDelete(Collection<String> activitiesToDelete) {
this.activitiesToDelete = activitiesToDelete;
}
public Collection<Avis> getAvisToCreate() {
return avisToCreate;
}
public void setAvisToCreate(Collection<Avis> avisToCreate) {
this.avisToCreate = avisToCreate;
}
public Collection<String> getAvisToDelete() {
return avisToDelete;
}
public void setAvisToDelete(Collection<String> avisToDelete) {
this.avisToDelete = avisToDelete;
}
}